Skip to main content

Overview

Event Markers are visual indicators automatically added to stocks based on recent corporate actions, regulatory filings, and surveillance measures. Field: Event Markers
Format: Pipe-separated string of icons and descriptions
Example: "📊: Results Recently Out | 💸: Dividend (15-Mar) | 🔑: Insider Trading"

Marker Categories

Surveillance Measures

Stocks under NSE surveillance due to price volatility or other concerns.
★: LTASM
marker
Trigger: Stock is in Long Term Additional Surveillance Measure (LTASM) listSource: nse_asm_list.jsonDetection Logic:
if "LTASM" in item.get("Stage", ""):
    add_event(symbol, "★: LTASM")
Implication: Stock has been in ASM for extended period; higher risk
★: STASM
marker
Trigger: Stock is in Short Term Additional Surveillance Measure (STASM) listSource: nse_asm_list.jsonDetection Logic:
if "STASM" in item.get("Stage", ""):
    add_event(symbol, "★: STASM")
Implication: Recently added to surveillance; monitor closely

Results Announcements

Quarterly and annual results filings.
📊: Results Recently Out
marker
Trigger: Quarterly results were released in the last 7 daysSource: all_company_announcements.jsonDetection Logic:
if "results are out" in event_text.lower() or event_type == "Results Update":
    if filing_date >= (today - 7 days):
        add_event(symbol, "📊: Results Recently Out")
Time Window: Last 7 daysUse Case: Track post-earnings price movements
⏰: Results (DD-Mon)
marker
Trigger: Quarterly results are scheduled within the next 14 daysSource: upcoming_corporate_actions.jsonFormat: "⏰: Results (15-Mar)"Detection Logic:
if "QUARTERLY" in event_type:
    if today <= ex_date <= (today + 14 days):
        add_event(symbol, f"⏰: Results ({ex_date.strftime('%d-%b')})")
Time Window: Next 14 daysUse Case: Pre-earnings positioning

Insider Activity

Regulatory filings related to insider trading and inter-se transfers.
🔑: Insider Trading
marker
Trigger: Insider trading disclosure detected in last 15 daysSource: company_filings/{SYMBOL}_filings.jsonDetection Keywords:
  • "regulation 7(2)" or "reg 7(2)"
  • "inter-se transfer"
  • "form c"
  • "continual disclosure"
  • "insider trading" (excluding “trading window” closure notices)
  • "sebi (pit)" or "sebi pit"
Detection Logic:
trade_keywords = [
    "regulation 7(2)", "reg 7(2)", "inter-se transfer", 
    "form c", "continual disclosure"
]

full_text = f"{descriptor} {caption} {category} {body}".lower()

if any(keyword in full_text for keyword in trade_keywords):
    add_event(symbol, "🔑: Insider Trading")
elif "insider trading" in full_text or "sebi (pit)" in full_text:
    if "trading window" not in full_text and "closure" not in full_text:
        add_event(symbol, "🔑: Insider Trading")
Time Window: Last 15 daysExclusions: Trading window closure announcements (not actual trades)

Block & Bulk Deals

Large institutional trades reported to the exchange.
📦: Block Deal
marker
Trigger: Bulk or Block deal occurred in the last 7 daysSource: bulk_block_deals.jsonDetection Logic:
if "BLOCK" in deal_type or "BULK" in deal_type:
    if deal_date >= (today - 7 days):
        add_event(symbol, "📦: Block Deal")
Time Window: Last 7 daysDeal Types Covered:
  • Block Deals (large off-market transactions)
  • Bulk Deals (trades exceeding 0.5% of equity)

Circuit Limit Revisions

Changes to daily price movement limits.
#: +ve Circuit Limit Revision
marker
Trigger: Circuit limit was increased (positive revision)Source: incremental_price_bands.jsonExample: 2%5% (reduced volatility control)Detection Logic:
if float(to_band) > float(from_band):
    add_event(symbol, "#: +ve Circuit Limit Revision")
#: -ve Circuit Limit Revision
marker
Trigger: Circuit limit was decreased (negative revision)Source: incremental_price_bands.jsonExample: 20%10% (tighter volatility control)Detection Logic:
if float(to_band) < float(from_band):
    add_event(symbol, "#: -ve Circuit Limit Revision")
Implication: Increased surveillance; exchange tightening controls

Upcoming Corporate Actions

Scheduled events within the next 30 days.
Trigger: Dividend ex-date within next 30 daysSource: upcoming_corporate_actions.jsonFormat: "💸: Dividend (22-Mar)"Detection Logic:
if "DIVIDEND" in event_type:
    if today <= ex_date <= (today + 30 days):
        add_event(symbol, f"💸: Dividend ({ex_date.strftime('%d-%b')})")
Date Shown: Ex-dividend date (last day to buy to be eligible)
Trigger: Bonus issue ex-date within next 30 daysFormat: "🎁: Bonus (10-Apr)"Detection Logic:
if "BONUS" in event_type:
    if today <= ex_date <= (today + 30 days):
        add_event(symbol, f"🎁: Bonus ({ex_date.strftime('%d-%b')})")
Example Bonus: 1:1, 2:1 (ratio shown in announcements, not marker)
Trigger: Stock split ex-date within next 30 daysFormat: "✂️: Split (05-May)"Detection Logic:
if "SPLIT" in event_type:
    if today <= ex_date <= (today + 30 days):
        add_event(symbol, f"✂️: Split ({ex_date.strftime('%d-%b')})")
Example Split: 1:10 (₹100 → ₹10)
Trigger: Rights issue ex-date within next 30 daysFormat: "📈: Rights (18-Jun)"Detection Logic:
if "RIGHTS" in event_type:
    if today <= ex_date <= (today + 30 days):
        add_event(symbol, f"📈: Rights ({ex_date.strftime('%d-%b')})")

Detection Timeline

Marker CategoryLookback PeriodLookahead Period
SurveillanceN/A (current status)N/A
Results Recently OutLast 7 days-
Results Upcoming-Next 14 days
Insider TradingLast 15 days-
Block/Bulk DealsLast 7 days-
Circuit RevisionsN/A (recent changes)-
Dividend/Bonus/Split/Rights-Next 30 days

Processing Order

Markers are processed in this sequence (in add_corporate_events.py):
  1. Surveillance Lists (ASM/GSM)
  2. Corporate Actions (Upcoming events from upcoming_corporate_actions.json)
  3. Circuit Limit Revisions (Price band changes)
  4. Deals (Bulk/Block deals)
  5. Insider Trading (From company filings)
  6. Recent Results (From live announcements)

Implementation Details

Add Event Function

def add_event(symbol, event_string):
    """
    Adds an event marker to a stock (deduplicates automatically).
    
    Args:
        symbol: Stock symbol (e.g., 'RELIANCE')
        event_string: Formatted event (e.g., '💸: Dividend (15-Mar)')
    """
    if symbol not in refined_map:
        refined_map[symbol] = []
    if event_string not in refined_map[symbol]:
        refined_map[symbol].append(event_string)

Final Assembly

# Convert list to pipe-separated string
for stock in master_data:
    symbol = stock.get("Symbol")
    events = refined_map.get(symbol, [])
    stock["Event Markers"] = " | ".join(events) if events else "N/A"

Example Outputs

Single Marker

{
  "Symbol": "TCS",
  "Event Markers": "📊: Results Recently Out"
}

Multiple Markers

{
  "Symbol": "RELIANCE",
  "Event Markers": "📊: Results Recently Out | 💸: Dividend (15-Mar) | 📦: Block Deal"
}

No Events

{
  "Symbol": "INFY",
  "Event Markers": "N/A"
}

Surveillance + Upcoming Action

{
  "Symbol": "ABC",
  "Event Markers": "★: STASM | #: -ve Circuit Limit Revision | ✂️: Split (10-Apr)"
}

Use Cases

Pre-Earnings Scanners

Filter stocks with "⏰: Results" marker to identify upcoming earnings plays

Post-Earnings Trackers

Monitor stocks with "📊: Results Recently Out" to analyze price reactions

Insider Activity Alerts

Track "🔑: Insider Trading" for potential directional signals

Risk Screening

Avoid or flag stocks with "★: LTASM/STASM" markers

Corporate Action Scanners

Find "🎁: Bonus" or "💸: Dividend" for ex-date plays

Institutional Activity

Monitor "📦: Block Deal" for large institutional movements

Recent Announcements

See Field Reference for regulatory filings that may have triggered markers

Earnings Tracking

See Field Reference for post-earnings performance metrics

Complete Marker Reference Table

IconNameTriggerTime WindowSource File
LTASMStock in Long Term ASMCurrentnse_asm_list.json
STASMStock in Short Term ASMCurrentnse_asm_list.json
📊Results Recently OutResults releasedLast 7 daysall_company_announcements.json
Results (DD-Mon)Results scheduledNext 14 daysupcoming_corporate_actions.json
🔑Insider TradingSEBI Reg 7(2) / Form C filingLast 15 dayscompany_filings/{SYM}_filings.json
📦Block DealBulk/Block deal reportedLast 7 daysbulk_block_deals.json
#+ve Circuit RevisionPrice band increasedRecent changeincremental_price_bands.json
#-ve Circuit RevisionPrice band decreasedRecent changeincremental_price_bands.json
💸Dividend (DD-Mon)Dividend ex-dateNext 30 daysupcoming_corporate_actions.json
🎁Bonus (DD-Mon)Bonus ex-dateNext 30 daysupcoming_corporate_actions.json
✂️Split (DD-Mon)Split ex-dateNext 30 daysupcoming_corporate_actions.json
📈Rights (DD-Mon)Rights ex-dateNext 30 daysupcoming_corporate_actions.json